﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;

namespace QuanLySimSo
{
    public partial class Form1 : Form       //Class Form. Không được code truy vấn CSDL trong này. Code thêm hàm gì trong này
    {                                       // thì ghi chú thêm vào

        public Form1()      //Dùng khởi tạo form.
        {
            InitializeComponent();
            clsSim Sim = new clsSim();
            ShowGridViewSim(Sim.LayTTSim());//Đưa thông tin Danh Sách Sim vào DataGridViewSim
            //MessageBox.Show(cmbxLoai.SelectedIndex.ToString());
        }

        private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)   //Bắt sự kiện khi chọn các Tab
        {
            if (tabControl1.SelectedIndex == 0)         //Chon tab them Sim
            {
                clsSim Sim = new clsSim();
                ShowGridViewSim(Sim.LayTTSim());       //Hiển thị thông tin danh sách Sim lên DataGridViewSim
            }
            else if (tabControl1.SelectedIndex == 1)    //Chon tab them Mang
            {
                clsMang Mang = new clsMang();
                ShowGridViewMang(Mang.LayTTMang());     //Hiển thị thông tin danh sách Mạng lên DataGridViewMang
            }
            else                                        //Chọn Tab Tìm Kiếm
            {
                clsSim Sim = new clsSim();
                ShowGridViewTimKiem(Sim.LayTTSim());    //Hiển thị thông tin danh sách Sim lên DataGridViewTimKiem
                clsKetNoiCSDL dl = new clsKetNoiCSDL();
                DataTable dt = dl.DSMang();
                cmbxMang.Items.Clear();
                cmbxMang.Items.Add("Tất cả");
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    cmbxMang.Items.Add(dt.Rows[i][0].ToString().Trim());
                }
                TimKiemLamMoi();
            }
        }

        private void btnMLamMoi_Click(object sender, EventArgs e)   //Click Button Làm mới ở Tab Mạng
        {
            MangLamMoi();   // Làm mới tab Mạng
        }

        private void btnSLamMoi_Click(object sender, EventArgs e)   //Click Button Làm mới ở Tab Sim
        {
            SimLamMoi();    // Làm mới tab Sim
        }

        private void btnTKLamMoi_Click(object sender, EventArgs e)
        {
            TimKiemLamMoi();
        }

        private void btnSThem_Click(object sender, EventArgs e)     //Them Sim
        {
            if (lblMang.Text != "" && lblLoaiSim.Text != "") //neu so Sim hop le.(Phải biết là mạng nào và Sim 10 số hay 11 số)
            {
                string strSim = txtSim.Text;
                string strDauSo;
                float fGia;
                string strLoaiSim = lblLoaiSim.Text;
                string strDaBan = txtDaBan.Text;

                if (txtGia.Text != "" && StringToFloat(txtGia.Text) == 0)   //neu txtGia co du lieu va khong phai la so hoac so < 0
                {
                    lblErrorGia.Visible = true;                             //hiển thị lblErrorGia
                    MessageBox.Show("Tiền nhập vào không hợp lệ");
                }
                else//khong co du lieu hoac co du lieu la so hop le
                {
                    lblErrorGia.Visible = false;                            //ẩn lblErrorGia
                    if (txtGia.Text == "")                                  //Nếu txtGia không có dữ liệu thì giá là 0
                    {
                        fGia = 0;
                        lblErrorGia.Visible = false;
                    }
                    fGia = StringToFloat(txtGia.Text);                  //Lấy dữ liệu từ txtGia và đổi sang kiểu số Float

                    strDauSo = KiemTraSim(strSim);                      //Kiểm tra Sim 10 hay 11 số và lấy ra đầu số
                    clsSim Sim = new clsSim(strSim, strDauSo, fGia, strLoaiSim, strDaBan);  //Khởi tạo đối tượng Sim có tham số truyền vào.
                    if (Sim.AddSim() == 1)                              //Nếu thêm Sim thành công.
                    {
                        MessageBox.Show("Thêm thành công");
                        ShowGridViewSim(Sim.LayTTSim());                //Hiển thị danh sách Sim lên DataGridViewSim
                    }
                    else
                        MessageBox.Show("Sim đã tồn tại");
                }
            }
            else// khong them Sim dc.kiem tra dau so nay da được nhà mạng nào đăng ký chưa
            {
                MessageBox.Show("Sim số không hợp lệ. \nKiểm tra đầu số này đã được nhà mạng nào đăng ký chưa.\nKiểm tra Sim từ 10 số đến 11 số.\nKiểm tra đã nhập Sim chưa");
            }
        }

        private void btnSXoa_Click(object sender, EventArgs e)      //Xoa Sim
        {
            string strSim = txtSim.Text;            //Lấy số sim từ txtSim
            if (KiemTraSim(strSim) == "")           // Nếu sim không hợp lệ
            {
                MessageBox.Show("Nhập số sim hợp lệ");
            }
            else                                //Sim hợp lệ
            {
                if (MessageBox.Show("Bạn có muốn xóa không?", "Thông báo", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == DialogResult.OK)
                {               //OK(đồng ý xóa)
                    clsSim Sim = new clsSim();
                    Sim.SOSIM = txtSim.Text;        // Gán giá trị trong txtSim vào thuộc tính SOSIM của đối tượng Sim
                    if (Sim.RemoveSim() == 1)       // Gọi thực thi hàm RemoveSim() của đối tượng Sim và kiểm tra xóa được không.
                    {
                        MessageBox.Show("Xóa thành công");
                        ShowGridViewSim(Sim.LayTTSim());    //Cập nhật lại DataGridViewSim
                    }
                    else
                        MessageBox.Show("Không xóa được!! Hãy kiểm tra lại Sim có tồn tại không");
                }
            }
        }

        private void btnSSua_Click(object sender, EventArgs e)      //Sua Sim
        {
            if (lblMang.Text != "" && lblLoaiSim.Text != "") //neu so Sim hop le.(Phải biết là mạng nào và Sim 10 số hay 11 số)
            {
                string strSim = txtSim.Text;
                string strDauSo;
                float fGia;
                string strLoaiSim = lblLoaiSim.Text;
                string strDaBan = txtDaBan.Text;
                strDaBan = strDaBan.ToUpper();
                if (txtGia.Text != "" && StringToFloat(txtGia.Text) == 0)   //neu txtGia co du lieu va khong phai la so hoac so < 0
                {
                    lblErrorGia.Visible = true;                             //hiển thị lblErrorGia
                    MessageBox.Show("Tiền nhập vào không hợp lệ");
                }
                else//khong co du lieu hoac co du lieu la so hop le
                {
                    lblErrorGia.Visible = false;                            //ẩn lblErrorGia
                    if (txtGia.Text == "")                                  //Nếu txtGia không có dữ liệu thì giá là 0
                    {
                        fGia = 0;
                        lblErrorGia.Visible = false;
                    }
                    fGia = StringToFloat(txtGia.Text);                  //Lấy dữ liệu từ txtGia và đổi sang kiểu số Float

                    strDauSo = KiemTraSim(strSim);                      //Kiểm tra Sim 10 hay 11 số và lấy ra đầu số
                    clsSim Sim = new clsSim(strSim, strDauSo, fGia, strLoaiSim, strDaBan);  //Khởi tạo đối tượng Sim có tham số truyền vào.
                    if (Sim.EditSim() == 1)                              //Nếu sua Sim thành công.
                    {
                        MessageBox.Show("Sua thành công");
                        ShowGridViewSim(Sim.LayTTSim());                //Hiển thị danh sách Sim lên DataGridViewSim
                    }
                    else
                        MessageBox.Show("Sua khong thanh cong");
                }
            }
        }

        private void btnMThem_Click(object sender, EventArgs e)      //Them Mang
        {
            string strDauSo = txtDauSo.Text;
            string strMang = txtMang.Text;
            strMang = strMang.ToUpper();                 //Đổi chữ thường sang chữ hoa
            if (KiemTraMang(strDauSo, strMang) == 1)    //Kiểm tra dữ liệu hợp lệ. 
            {
                clsMang Mang = new clsMang(strDauSo, strMang);
                if (Mang.AddMang() == 1)                //Kiểm tra thêm mạng
                {
                    MessageBox.Show("Thêm thành công");
                    ShowGridViewMang(Mang.LayTTMang());
                }
                else
                    MessageBox.Show("Thêm không thành công. Đầu số này đã tồn tại");
            }

        }

        private void btnMXoa_Click(object sender, EventArgs e)      // Xoa Mang
        {
            string strDauSo = txtDauSo.Text;                        // Lấy đầu số
            string strMang = "123";
            if (KiemTraMang(strDauSo, strMang) == 1)                //Kiểm tra dữ liệu hợp lệ. 
            {
                if (MessageBox.Show("Bạn có muốn xóa không?", "Thông báo", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == DialogResult.OK)
                {

                    clsMang Mang = new clsMang(strDauSo, strMang);
                    if (Mang.RemoveMang() == 1)                 //Kiểm tra xóa mạng
                    {
                        MessageBox.Show("Xóa thành công");
                        ShowGridViewMang(Mang.LayTTMang());
                    }
                    else
                        MessageBox.Show("Xóa không thành công. \nPhải xóa hết Sim có đầu số " + strDauSo + " \nthì mới xóa mạng này được");
                }
            }
        }

        private void btnMSua_Click(object sender, EventArgs e)      //Sua Mang
        {
            string strDauSo = txtDauSo.Text;
            string strMang = txtMang.Text;
            strMang = strMang.ToUpper();                 //Đổi chữ thường sang chữ hoa
            clsMang Mang = new clsMang(strDauSo, strMang);

            if (Mang.EditMang() == 1)                //Kiểm tra sua mạng
            {
                MessageBox.Show("Sua thành công");
                ShowGridViewMang(Mang.LayTTMang());
            }
            else
                MessageBox.Show("Sua không thành công.");
        }

        private void dtgvSim_CellEnter(object sender, DataGridViewCellEventArgs e) //Đưa dữ liệu của ô được chọn trong dtgvSim vào các TextBox hoặc Lable
        {
            if (txtSim.Enabled == true)
                txtSim.Enabled = false;
            int irowIndex = -1;                     //Biến lưu giá trị dòng của DataGridView
            if (dtgvSim.SelectedCells.Count > 0)    //Nếu chọn 1 hay nhiều ô
                irowIndex = this.dtgvSim.SelectedCells[0].RowIndex;     //Lấy ra giá trị dòng của ô đang chọn
            if (irowIndex >= 0)
            {
                DataGridViewRow dtgrow = this.dtgvSim.Rows[irowIndex];  //Khai báo 1 dòng dữ liệu thứ irowIndex đang được chọn của dtgvSim
                if (dtgrow.Cells[0].Value != null)                      //Nếu dữ liệu trong ô thứ 0 (cột Sim)của dòng dữ liệu đang được chọn khác rỗng
                {
                    this.txtSim.Text = dtgrow.Cells[0].Value.ToString().TrimEnd();// Gán giá trị trong ô thứ 0 vào txtSim
                }
                if (dtgrow.Cells[1].Value != null)                      //Cột Giá
                {
                    this.txtGia.Text = dtgrow.Cells[1].Value.ToString().TrimEnd();
                }
                if (dtgrow.Cells[2].Value != null)                      //Cột Đã Bán
                {
                    this.txtDaBan.Text = dtgrow.Cells[2].Value.ToString().TrimEnd();
                }
                if (dtgrow.Cells[3].Value != null)                      //Cột Mạng
                {
                    this.lblMang.Text = dtgrow.Cells[3].Value.ToString().TrimEnd();
                }
                if (dtgrow.Cells[4].Value != null)                      //Cột Loai Sim
                {
                    this.lblLoaiSim.Text = dtgrow.Cells[4].Value.ToString().TrimEnd();
                }
                btnSThem.Enabled = false;
                btnSSua.Enabled = true;
                btnSXoa.Enabled = true;
            }
        }

        private void dtgvMang_CellEnter(object sender, DataGridViewCellEventArgs e)  // Tương Tự dtgvSim_CellEnter
        {

            if (txtDauSo.Enabled == true)
                txtDauSo.Enabled = false;
            int irowIndex = -1;
            if (dtgvMang.SelectedCells.Count > 0)
                irowIndex = this.dtgvMang.SelectedCells[0].RowIndex;
            if (irowIndex >= 0)
            {
                DataGridViewRow dtgrow = this.dtgvMang.Rows[irowIndex];
                if (dtgrow.Cells[0].Value != null)                          //Cột Đầu Số
                {
                    this.txtDauSo.Text = dtgrow.Cells[0].Value.ToString().TrimEnd();
                }
                if (dtgrow.Cells[1].Value != null)                          //Cột Mạng
                {
                    this.txtMang.Text = dtgrow.Cells[1].Value.ToString().TrimEnd();
                }
                btnMThem.Enabled = false;
                btnMSua.Enabled = true;
                btnMXoa.Enabled = true;
            }
        }

        private void txtSim_Validating(object sender, CancelEventArgs e)    //Bắt sự kiện khi nhập dữ liệu xong và chọn Textbox hoặc Button khác.TxtSim
        {
            string strSim = txtSim.Text;
            strSim = strSim.Trim();
            if (KiemTraSim(strSim) != "")       //Kiểm tra Sim hợp lệ
            {
                clsKetNoiCSDL da = new clsKetNoiCSDL();
                string strDauSo = KiemTraSim(strSim);
                lblErrorSim.Visible = false; ;
                lblLoaiSim.Text = txtSim.TextLength.ToString();
                lblMang.Text = da.KiemTraDauSo(strDauSo);
            }
            else
            {
                lblErrorSim.Visible = true;
                lblLoaiSim.Text = "";
                lblMang.Text = "";
            }
        }

        private void txtGia_Validated(object sender, EventArgs e)   //Bắt sự kiện khi nhập dữ liệu xong và chọn Textbox hoặc Button khác. TxtGia
        {
            if (txtGia.Text != "" && StringToFloat(txtGia.Text) != 0)   //Kiểm tra dữ liệu hợp lệ.
            {
                lblErrorGia.Visible = false;
            }
            else if (txtGia.Text == "")
            {
                lblErrorGia.Visible = false;
            }
            else
            {
                lblErrorGia.Visible = true;
            }
        }

        private void btnTimKiem_Click(object sender, EventArgs e)
        {
            string strTK = txtTKSim.Text;
            clsKetNoiCSDL kn = new clsKetNoiCSDL();
            //Tim kiem tam co, tu quy
            if (chbxTCTQ.Checked == true)
            {
                //tim kiem tam co
                if (rbtnTamCo.Checked == true)
                {
                    ShowGridViewTimKiem(kn.TKTamCo());
                }
                else
                    //tim kiem tu quy
                    if (rbtnTuQuy.Checked == true)
                    {
                        ShowGridViewTimKiem(kn.TKTuQuy());
                    }
            }

            //Tim kiem theo dang xx. Lien;
            if (strTK.Contains("x"))
            {
                //MessageBox.Show("Co X trong chuoi");
                strTK = strTK.Replace("x", "_");
                if (strTK.Length < 11)
                    strTK = "%" + strTK + "%";
                ShowGridViewTimKiem(kn.TKSimXX(strTK));
            } else
                if (strTK.Contains("X"))
                {
                    //MessageBox.Show("Co X trong chuoi");
                    strTK = strTK.Replace("X", "_");
                    if (strTK.Length < 11)
                        strTK = "%" + strTK + "%";
                    ShowGridViewTimKiem(kn.TKSimXX(strTK));
                }

            //Tim kiem so duoi. Cam
            if (strTK.Length < 11 && strTK != "")
            {
                string SoSim = "%" + strTK;
                ShowGridViewTimKiem(kn.TKTatCa(SoSim));
            }

            //Thanh Tam. Tim kiem theo Loai va Mang
            if (cmbxMang.SelectedIndex != 0 && cmbxLoai.SelectedIndex != 0)
            {
                //MessageBox.Show("Chon Loai Va Mang." + cmbxLoai.SelectedItem.ToString().Trim() + "/" +cmbxMang.SelectedItem.ToString());
                ShowGridViewTimKiem(kn.TKTheoLoaiVaMang(cmbxLoai.SelectedItem.ToString().Trim(), cmbxMang.SelectedItem.ToString()));
            }
            else
            {

                //Vu Anh tim kiem theo Loai
                if (cmbxLoai.SelectedIndex != 0)
                {
                    if (cmbxLoai.SelectedIndex == 1)
                    {
                        ShowGridViewTimKiem(kn.TKTheoLoai("10"));
                    }
                    else if (cmbxLoai.SelectedIndex == 2)
                    {
                        ShowGridViewTimKiem(kn.TKTheoLoai("11"));
                    }
                }
                //Vu Anh Tim kiem theo Mang
                if (cmbxMang.SelectedIndex != 0)
                {
                    ShowGridViewTimKiem(kn.TKTheoMang(cmbxMang.SelectedItem.ToString()));
                }
            }
        }

        private void chbxTCTQ_CheckedChanged(object sender, EventArgs e)
        {
                if (chbxTCTQ.Checked == true)
                {
                    rbtnTamCo.Visible = true;
                    rbtnTuQuy.Visible = true;
                }
                else
                {
                    rbtnTamCo.Visible = false;
                    rbtnTuQuy.Visible = false;
                }
        }

        private void ShowGridViewMang(DataTable dt)     //Hiển thị dữ liệu lên DataGridViewMang, tham số truyền vào là DataTable
        {
            dtgvMang.DataSource = dt;                   //đưa dữ liệu từ DataTable vào DataGridViewMang (dtgvMang)
            dtgvMang.Refresh();                         //Làm tươi(cập nhật dữ liệu mới) DataGridViewMang

            MangLamMoi();                               //Làm mới tab Mạng
        }

        private void ShowGridViewSim(DataTable dt)      //Tương tự như ShowGridViewMang nhưng dành cho DataGridViewSim
        {
            dtgvSim.DataSource = dt;
            dtgvSim.Refresh();

            SimLamMoi();
        }

        private void ShowGridViewTimKiem(DataTable dt)  //Tương tự như ShowGridViewMang nhưng dành cho DataGridViewTimKiem
        {
            dtgvTimKiem.DataSource = dt;
            dtgvTimKiem.Refresh();

            TimKiemLamMoi();
        }

        private void MangLamMoi()       // Lam moi tab Mang(trừ DataGridView)
        {
            txtDauSo.Text = "";
            txtMang.Text = "";
            btnMThem.Enabled = true;
            btnMSua.Enabled = false;
            btnMXoa.Enabled = false;
            if (txtDauSo.Enabled == false)
                txtDauSo.Enabled = true;
        }

        private void SimLamMoi()        // Làm moi tab Sim (trừ DataGridView)
        {
            txtSim.Text = "";
            txtGia.Text = "";
            txtDaBan.Text = "CHUA";
            lblLoaiSim.Text = "";
            lblMang.Text = "";
            btnSThem.Enabled = true;
            btnSSua.Enabled = false;
            btnSXoa.Enabled = false;
            if (txtSim.Enabled == false)
                txtSim.Enabled = true;
        }

        private void TimKiemLamMoi()    //Làm mới Tab tìm kiếm (trừ DataGridView)
        {
            txtTKSim.Text = "";
            cmbxLoai.SelectedIndex = 0;
            cmbxMang.SelectedIndex = 0;
            chbxTCTQ.Checked = false;
        }

        private int KiemTraMang(string strDauSo, string strMang)    //Kiểm tra tên Mạng phải từ 1-10 ký tự. Đầu số 3-4 ký tự và là số >0
        {                                                           // Đúng trả về 1, sai trả về 0.
            if (strMang.Trim().Length > 0 && strMang.Trim().Length < 11)
            {
                lblErrorMang.Visible = false;
                if (strDauSo.Trim().Length > 2 && strDauSo.Trim().Length < 5 && StringToInt(strDauSo.Trim()) != 0)
                {
                    lblErrorDauSo.Visible = false;
                    return 1;
                }
                lblErrorDauSo.Visible = true;
                return 0;
            }
            else
            {
                lblErrorMang.Visible = true;
                return 0;
            }
        }

        private string KiemTraSim(string strSim) //kiểm tra sim 10 so hay 11 so, co ky tu hay ko. Tra ve gia tri dau so sim neu dung nguoc lai la gia tri rong.
        {
            strSim = strSim.Trim();                                     // cắt bỏ khoảng trắng.
            if (strSim.Length == 11 && StringToFloat(strSim) != 0)      //kiểm tra độ dài chuỗi ký tự strSim và là số hợp lệ
            {
                string strTemp = strSim.Substring(0, 4);                    //Cắt chuỗi strSim bắt đầu từ vị trí thứ 0, lấy 4 ký tự
                return strTemp;
            }
            else
                if (strSim.Length == 10 && StringToFloat(strSim) != 0)
                {
                    string strTemp = strSim.Substring(0, 3);
                    return strTemp;
                }
                else
                    return "";
        }

        private int StringToInt(string strChuoi)                    //Đổi chuỗi sang kiểu Int và kiểm tra > 0. Đúng trả về số, sai trả về 0 
        {
            try
            {
                int iSo = int.Parse(strChuoi);
                if (iSo > 0)
                    return iSo;
                return 0;           //Số nhưng nhỏ hơn 0
            }
            catch
            {
                return 0;
            }
        }

        private float StringToFloat(string strChuoi)    //Đổi chuỗi sang kiểu Float và kiểm tra > 0. Đúng trả về số, sai trả về 0 
        {
            try
            {
                float fSo = float.Parse(strChuoi);
                if (fSo > 0)
                    return fSo;
                return 0;           //Số nhưng nhỏ hơn 0
            }
            catch
            {
                return 0;
            }
        }

        private void tabPage3_Click(object sender, EventArgs e)
        {

        }

        private void mniThemSim_Click(object sender, EventArgs e)   //khi chọn MenuItem Thêm Sim
        {
            tabControl1.SelectedIndex = 0;                          //Hiển thị Tab Thêm Sim
        }

        private void mniThemMang_Click(object sender, EventArgs e)  //khi chọn MenuItem Thêm Mang
        {
            tabControl1.SelectedIndex = 1;                          //Hiển thị Tab Thêm Mang
        }

        private void mniTimKiem_Click(object sender, EventArgs e)   //khi chọn MenuItem Tim Kiếm
        {
            tabControl1.SelectedIndex = 2;                          //Hiển thị Tab Thêm Tim Kiếm
        }

        private void mniExit_Click(object sender, EventArgs e)      //Click Menu Thoat
        {
            if (MessageBox.Show("Ban co muon thoat khong?", "Thong bao", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == DialogResult.OK)
            {
                this.Close();
            }
        }

        private void mniAbout_Click(object sender, EventArgs e)
        {
            frmBanQuyen ab = new frmBanQuyen();     //Khai báo form AboutBox1
            ab.Show();                          //Hiển thị form giúp đỡ
        }

        private void mniHuongDan_Click(object sender, EventArgs e)
        {
            frmHelp hl = new frmHelp();
            hl.Show();
        }
        //Các bạn code phần dưới này. Không dc sửa ở trên. Nếu cần có thể lấy sài

    }
}
